// 这里引入我们创建的router对象,不要重新引入'vue-router'
import router from './index';
// 导入进度条
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
// 导入 Cookie 工具类
import { getCookie } from "@/utils/Cookie";
import store from "@/store";
// 导入 element-ui
import { Message } from 'element-ui';

const whiteUrls = ['/login'];

// 路由前置守卫
router.beforeEach(async(to, from, next) => {
    // 开启进度条
    NProgress.start();
    // 前置守卫里面,用于判断是否有权限访问当前路由
    // 获取本地Cookie
    const token = getCookie();
    if (token) {
        console.log('------')
        console.log('token------', token)
        // 有token的话,则判断路径是否为/login,是登录直接跳转到首页
        if (to.path === '/login') {
            next({ path: '/' });
            NProgress.done();
        } else {
            // 不是登录,则判断是否有用户信息
            const userInfo = store.getters.username;
            if (userInfo) {
                console.log('说明用户已经登录了')
                // 有用户信息,说明用户已经登录了,当前访问url是合法的
                next();
            } else {
                try {
                    // 获取用户信息
                    await store.dispatch('getUserInfo');
                    await store.dispatch('getUserMenu');
                    next();
                } catch (error) {
                    // 获取失败,则清空token
                    await store.dispatch('resetToken');
                    Message.error(error || 'Has Error');
                    console.log('Has Error')
                    next(`/login?redirect=${to.path}`);
                    NProgress.done();
                }
            }
        }
    } else {
        // 没有token,判断是否白名单
        if (whiteUrls.indexOf(to.path) !== -1) {
            next(); // 白名单url,直接放行
        } else {
            // 跳转到登录页面,使用redirect重定向,可以避免返回上一个url
            next(`/login?redirect=${to.path}`);
            NProgress.done();
        }
    }
});

// 路由后置守卫
router.afterEach(() => {
    // 关闭进度条
    NProgress.done();
});
